package com.design.proxy;

import java.lang.reflect.Proxy;

/**
 * 动态代理
 * 关键点
 * 接口：被代理类必须实现一个或多个接口。
 * InvocationHandler：实现 InvocationHandler 接口，处理方法调用。
 * 代理对象：通过 Proxy.newProxyInstance 方法动态创建，实现了与被代理类相同的接口。
 * 方法调用：通过代理对象调用方法时，实际调用的是 InvocationHandler 的 invoke 方法。
 * 适用场景
 * 日志记录、事务管理、权限校验等等
 * @author ytj
 * @date 2024/11/28 11:29
 */
public class ProxyTest {

    public static void main(String[] args) {
        ProxyService proxyService=new ProxyServiceImpl();
        ProxyHandler proxyHandler=new ProxyHandler(proxyService);
        ProxyService service =(ProxyService) Proxy.newProxyInstance(proxyService.getClass().getClassLoader(), new Class[]{ProxyService.class}, proxyHandler);
        service.test();
    }
}
